import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig, loadEnv } from 'vite';
import compression from 'vite-plugin-compression2';
//Gzip配置优化
import svg from '@poppanator/sveltekit-svg'; // 导入插件

export default defineConfig(({ mode }) => {
	let env = loadEnv(mode, process.cwd());
	return {
		plugins: [
			sveltekit(),
			svg(),
			// 配置Gzip压缩插件
			compression({
				// 1. 配置压缩算法（支持 gzip、brotli、zstd）
				algorithms: [
				  // 算法1：Gzip（兼容性好，适合所有浏览器）
				  [
					'gzip', // 算法标识（固定值：'gzip'）
					{ level: 6 } // Gzip 选项：压缩级别（0-9，6 是平衡值）
				  ],
				],
		  
				// 2. 控制压缩范围：仅压缩大于 10KB 的文件（小文件压缩收益低）
				threshold: 10240, // 单位：字节（10240 = 10KB）
		  
				// 3. 保留原始文件（默认 false，建议保留，避免服务端依赖）
				deleteOriginalAssets: false,
		  
				// 4. 排除无需压缩的文件（减少构建时间）
				exclude: [
				  /\.map$/, // 排除 sourcemap（压缩后调试困难，且体积小）
				  /ssr-manifest\.json$/, // SvelteKit SSR 清单文件（无需压缩）
				  /sw\.js$/ // 服务工作线程文件（部分场景压缩会导致报错）
				]
			  })
		],
		resolve: {
			alias: {
				$icons: '/src/lib/assets/icons/'
			}
		},
		test: {
			expect: { requireAssertions: true },
			projects: [
				{
					extends: './vite.config.ts',
					test: {
						name: 'client',
						environment: 'browser',
						browser: {
							enabled: true,
							provider: 'playwright',
							instances: [{ browser: 'chromium' }]
						},
						include: ['src/**/*.svelte.{test,spec}.{js,ts}'],
						exclude: ['src/lib/server/**'],
						setupFiles: ['./vitest-setup-client.ts']
					}
				},
				{
					extends: './vite.config.ts',
					test: {
						name: 'server',
						environment: 'node',
						include: ['src/**/*.{test,spec}.{js,ts}'],
						exclude: ['src/**/*.svelte.{test,spec}.{js,ts}']
					}
				}
			]
		},
		server: {
			proxy: {
				[env.VITE_APP_BASE_API]: {
					//获取服务器地址的设置
					target: env.VITE_SERVE,
					//是否需要代理跨域
					changeOrigin: true,
					//路径重写
					rewrite: (path) => path.replace(/^\/api/, '')
				}
				// "/bpi": {
				//     //获取服务器地址的设置
				//     target: 'http://192.168.9.137:9233/',
				//     //是否需要代理跨域
				//     changeOrigin: true,
				//     //路径重写
				//     rewrite: (path) => path.replace(/^\/bpi/, ''),
				// }
			},
			host: '0.0.0.0'
		}
	};
});
